home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / disk / misc / TestGeometry.lha / TestGeometry / TestGeometry.mod < prev   
Text File  |  1995-08-25  |  9KB  |  239 lines

  1. (*
  2. (****** TestGeometry/--AMOK-Header-- ****************************************
  3.  
  4. :Program.    TestGeometry.mod
  5. :Contents.   TD_GETGEOMETRY test/demo for Exec device drivers
  6. :Author.     Oliver Knorr
  7. :Copyright.  Public Domain
  8. :Language.   Oberon-2
  9. :Translator. Amiga Oberon v3.11
  10. :History.    v1.0 [olk] 25-Aug-95
  11. :Version.    $VER: TestGeometry.mod 1.0 (25.8.95)
  12.  
  13. *****************************************************************************
  14. *
  15. *)
  16. *)
  17.  
  18. MODULE TestGeometry;
  19.  
  20. (****** TestGeometry/--background-- *****************************************
  21. *
  22. *       This is a test and demonstration program for the TD_GETGEOMETRY
  23. *       and TD_PROTSTATUS commands that may be implemented in
  24. *       trackdisk.device-compatible Exec devices.
  25. *
  26. *****************************************************************************
  27. *
  28. *)
  29.  
  30.  
  31. IMPORT
  32.  
  33.   Exec, Dos, TrackDisk, SCSIDisk, io;
  34.  
  35.  
  36. TYPE
  37.  
  38.   Args = STRUCT (as: Dos.ArgsStruct)
  39.            device : Dos.ArgString;
  40.            unit   : Dos.ArgLong;
  41.          END;
  42.  
  43.  
  44. CONST
  45.  
  46.   template  = "DEVICE/A,UNIT/N/A";
  47.   verString = "$VER: TestGeometry 1.0 (25.8.95) by Oliver Knorr";
  48.  
  49.  
  50. VAR
  51.  
  52.   rdArgs    : Dos.RDArgsPtr;
  53.   args      : Args;
  54.   msgPort   : Exec.MsgPortPtr;
  55.   ioReq     : Exec.IOStdReqPtr;
  56.   driveGeo  : TrackDisk.DriveGeometryPtr;
  57.  
  58.  
  59. (****** TestGeometry/IOError ************************************************
  60. *
  61. *   NAME
  62. *       IOError -- print scsi device driver error message
  63. *
  64. *   SYNOPSIS
  65. *       IOError(code: SHORTINT)
  66. *
  67. *   FUNCTION
  68. *       Writes the given error code and an appropriate error message
  69. *       to standard output. Knows messages for Exec, Trackdisk and
  70. *       SCSIDisk error codes.
  71. *
  72. *   INPUTS
  73. *       code - the error code returned in the "error" field
  74. *              of your Exec.IOStdReq
  75. *
  76. *   RESULT
  77. *
  78. *   EXAMPLE
  79. *       IF Exec.DoIO (ioReq) = 0 THEN
  80. *         (* handle success case *)
  81. *       ELSE
  82. *         IOError(ioReq.error)
  83. *       END
  84. *
  85. *   NOTES
  86. *
  87. *   BUGS
  88. *
  89. *   SEE ALSO
  90. *
  91. *****************************************************************************
  92. *
  93. *)
  94.  
  95. PROCEDURE IOError(code: SHORTINT);
  96. BEGIN
  97.   io.WriteString("error "); io.WriteInt(code, 0);
  98.   CASE code OF
  99.      Exec.openFail            : io.WriteString(" (device/unit failed to open)")
  100.    | Exec.aborted             : io.WriteString(" (request terminated early)")
  101.    | Exec.noCmd               : io.WriteString(" (command not supported by device)")
  102.    | Exec.badLength           : io.WriteString(" (not a valid length)")
  103.    | Exec.badAddress          : io.WriteString(" (invalid address)")
  104.    | Exec.unitBusy            : io.WriteString(" (requested unit is busy)")
  105.    | Exec.selfTest            : io.WriteString(" (hardware failed self-test)")
  106.    | TrackDisk.notSpecified   : io.WriteString(" (not specified)")
  107.    | TrackDisk.noSecHdr       : io.WriteString(" (no sector header)")
  108.    | TrackDisk.badSecPreamble : io.WriteString(" (bad sector preamble)")
  109.    | TrackDisk.badSecID       : io.WriteString(" (bad secotor ID)")
  110.    | TrackDisk.badHdrSum      : io.WriteString(" (bad header checksum)")
  111.    | TrackDisk.badSecSum      : io.WriteString(" (bad data checksum)")
  112.    | TrackDisk.tooFewSecs     : io.WriteString(" (too few sectors)")
  113.    | TrackDisk.badSecHdr      : io.WriteString(" (bad sector header)")
  114.    | TrackDisk.writeProt      : io.WriteString(" (disk is write protected)")
  115.    | TrackDisk.diskChanged    : io.WriteString(" (no disk in the drive)")
  116.    | TrackDisk.seekError      : io.WriteString(" (seek error)")
  117.    | TrackDisk.noMem          : io.WriteString(" (out of memory)")
  118.    | TrackDisk.badUnitNum     : io.WriteString(" (bad unit number)")
  119.    | TrackDisk.badDriveType   : io.WriteString(" (bad drive type)")
  120.    | TrackDisk.driveInUse     : io.WriteString(" (drive in use)")
  121.    | TrackDisk.postReset      : io.WriteString(" (post reset)")
  122.    | SCSIDisk.selfUnit        : io.WriteString(" (cannot issue SCSI command to self)")
  123.    | SCSIDisk.dma             : io.WriteString(" (DMA error)")
  124.    | SCSIDisk.phase           : io.WriteString(" (illegal or unexpected SCSI phase)")
  125.    | SCSIDisk.parity          : io.WriteString(" (SCSI parity error)")
  126.    | SCSIDisk.selTimeout      : io.WriteString(" (select timed out)")
  127.    | SCSIDisk.badStatus       : io.WriteString(" (status and/or sense error)")
  128.    | SCSIDisk.noBoard         : io.WriteString(" (open failed for non-existant board)")
  129.   ELSE
  130.   END
  131. END IOError;
  132.  
  133.  
  134. BEGIN
  135.  
  136.   IF verString[0]="$" THEN END; (* the version string shouldn't be optimized away *)
  137.  
  138.   IF Exec.SysBase.libNode.version >= 37 THEN
  139.  
  140.     rdArgs := Dos.ReadArgs (template, args, NIL);
  141.     IF rdArgs # NIL THEN
  142.       msgPort := Exec.CreateMsgPort();
  143.       IF msgPort # NIL THEN
  144.         ioReq := Exec.CreateIORequest(msgPort, SIZE(Exec.IOStdReq));
  145.         IF ioReq # NIL THEN
  146.           IF Exec.OpenDevice(args.device^, args.unit[0], ioReq, LONGSET{}) = 0 THEN
  147.  
  148.             io.WriteString("TD_GETGEOMETRY:"); io.WriteLn;
  149.             io.WriteString("==============="); io.WriteLn;
  150.             NEW(driveGeo);
  151.             ioReq.command := TrackDisk.getGeometry;
  152.             ioReq.length  := SIZE(TrackDisk.DriveGeometry);
  153.             ioReq.data    := driveGeo;
  154.             IF Exec.DoIO (ioReq) = 0 THEN
  155.               io.WriteString("sector size      : "); io.WriteInt(driveGeo.sectorSize,   0); io.WriteLn;
  156.               io.WriteString("total sectors    : "); io.WriteInt(driveGeo.totalSectors, 0); io.WriteLn;
  157.               io.WriteString("cylinders        : "); io.WriteInt(driveGeo.cylinders,    0); io.WriteLn;
  158.               io.WriteString("sectors/cylinder : "); io.WriteInt(driveGeo.cylSectors,   0); io.WriteLn;
  159.               io.WriteString("heads            : "); io.WriteInt(driveGeo.heads,        0); io.WriteLn;
  160.               io.WriteString("sectors/track    : "); io.WriteInt(driveGeo.trackSectors, 0); io.WriteLn;
  161.               io.WriteString("buffer mem type  : "); io.WriteInt(driveGeo.bufMemType,   0); io.WriteLn;
  162.               io.WriteString("device type      : "); io.WriteInt(driveGeo.deviceType,   0); io.Write(" ");
  163.               CASE driveGeo.deviceType OF
  164.                  TrackDisk.directAccess     : io.WriteString("direct access")
  165.                | TrackDisk.sequentialAccess : io.WriteString("sequentiall access")
  166.                | TrackDisk.printer          : io.WriteString("printer")
  167.                | TrackDisk.processor        : io.WriteString("processor")
  168.                | TrackDisk.worm             : io.WriteString("WORM")
  169.                | TrackDisk.cdRom            : io.WriteString("CD-ROM")
  170.                | TrackDisk.scanner          : io.WriteString("scanner")
  171.                | TrackDisk.opticalDisk      : io.WriteString("optical disk")
  172.                | TrackDisk.mediumChanger    : io.WriteString("medium changer")
  173.                | TrackDisk.communication    : io.WriteString("communication")
  174.                | TrackDisk.unknown          : io.WriteString("unknown")
  175.               ELSE
  176.               END;
  177.               io.WriteLn;
  178.               io.WriteString("flags            :");
  179.               IF TrackDisk.removable IN driveGeo.flags THEN io.WriteString(" removable") END;
  180.               IF 1 IN driveGeo.flags THEN io.WriteString(" 1") END;
  181.               IF 2 IN driveGeo.flags THEN io.WriteString(" 2") END;
  182.               IF 3 IN driveGeo.flags THEN io.WriteString(" 3") END;
  183.               IF 4 IN driveGeo.flags THEN io.WriteString(" 4") END;
  184.               IF 5 IN driveGeo.flags THEN io.WriteString(" 5") END;
  185.               IF 6 IN driveGeo.flags THEN io.WriteString(" 6") END;
  186.               IF 7 IN driveGeo.flags THEN io.WriteString(" 7") END;
  187.               io.WriteLn
  188.             ELSE
  189.               IOError(ioReq.error);
  190.               io.WriteString(" reading drive geometry"); io.WriteLn
  191.             END;
  192.             io.WriteLn;
  193.   
  194.             io.WriteString("TD_PROTSTATUS:"); io.WriteLn;
  195.             io.WriteString("=============="); io.WriteLn;
  196.             ioReq.command := TrackDisk.protStatus;
  197.             IF Exec.DoIO (ioReq) = 0 THEN
  198.               io.WriteString("write-protect status: ");
  199.               io.WriteInt(ioReq.actual, 0);
  200.               IF ioReq.actual = 0 THEN
  201.                 io.WriteString(" read/write")
  202.               ELSE
  203.                 io.WriteString(" read only")
  204.               END;
  205.               io.WriteLn
  206.             ELSE
  207.               IOError(ioReq.error);
  208.               io.WriteString(" reading write-protect status"); io.WriteLn
  209.             END;
  210.             io.WriteLn;
  211.  
  212.             Exec.CloseDevice(ioReq)
  213.           ELSE
  214.             IOError(ioReq.error);
  215.             io.WriteString(" opening ");
  216.             io.WriteString(args.device^);
  217.             io.WriteString(" unit ");
  218.             io.WriteInt(args.unit[0], 0); io.WriteLn
  219.           END;
  220.           Exec.DeleteIORequest(ioReq)
  221.         ELSE
  222.           io.WriteString("could not create IORequest"); io.WriteLn
  223.         END;
  224.         Exec.DeleteMsgPort(msgPort)
  225.       ELSE
  226.         io.WriteString("could not create message port"); io.WriteLn
  227.       END;
  228.       Dos.FreeArgs(rdArgs)
  229.     ELSE
  230.       io.WriteString("wrong arguments"); io.WriteLn
  231.     END
  232.  
  233.   ELSE
  234.     io.WriteString("requires exec.library V37"); io.WriteLn
  235.   END
  236.  
  237.  
  238. END TestGeometry.
  239.